import java.util.Stack;
// 力扣224. 基本计算器
class Solution {
    public int calculate(String s) {
        Stack<Integer> stack = new Stack<>();
        int num = 0;
        int result = 0;
        int sign = 1; // 1表示正，-1表示负

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0'); // 当我们在字符串中读取数字时，数字可能是 多位数，比如 "123"
            } else if (c == '+') { // 因为这里题目仅仅给了'+'和'-'所以我们遇到这两个符号直接算值，然后添加到结果里, 不用考虑优先级
                result += sign * num;
                num = 0;
                sign = 1;
            } else if (c == '-') {
                result += sign * num;
                num = 0;
                sign = -1;
            } else if (c == '(') {
                // 把当前结果和符号压入栈
                stack.push(result);
                stack.push(sign);
                // 重置结果和符号
                result = 0;
                sign = 1;
            } else if (c == ')') {
                result += sign * num;
                num = 0;
                result *= stack.pop(); // 弹出符号
                result += stack.pop(); // 弹出之前的结果
            }
        }

        // 处理最后一个数字
        if (num != 0) {
            result += sign * num;
        }

        return result;
    }
}